package main

import (
	"log"
	"net/http"
	"text/template"

	"gitee.com/Yu-eng/Myproject/my-go-blog/config"
	"gitee.com/Yu-eng/Myproject/my-go-blog/models"
)

// type IndexData struct {
// 	//利用`` 一方面变量名首字母大写可以公共访问，在json下首字母还是小写
// 	//符合json等别的数据类型的规范
// 	Title string `json:"title"`
// 	Desc  string `json:"desc"`
// }

// func index(w http.ResponseWriter, r *http.Request) {
// 	//指名返回的格式是json  （前后端分离,利用json传递数据）
// 	w.Header().Set("Content-Type", "application/json")
// 	var indexData IndexData
// 	indexData.Title = "刘宇鹏go博客"
// 	indexData.Desc = "这是一个练手项目"
// 	jsonStr, _ := json.Marshal(indexData)

// 	w.Write(jsonStr)
// }

func index(w http.ResponseWriter, r *http.Request) {

	t := template.New("index.html")
	//如何找到文件 找到当前路径
	path := config.Cfg.System.CurrentDir

	//访问博客首页模板的时候，因为有多个模板的嵌套，解析文件的时候，需要将涉及
	//到的所有模板都进行解析
	home := path + "/template/home.html"
	Header := path + "/template/layout/header.html"
	footer := path + "/template/layout/footer.html"
	personal := path + "/template/layout/personal.html"
	post := path + "/template/layout/post-list.html"
	pagination := path + "/template/layout/pagination.html"

	//解析文件
	t, _ = t.ParseFiles(path+"/template/index.html", home, Header, footer, personal, post, pagination) //这里可以有多个文件,这里忽略了错误

	//页面模板的数据都需要定义
	var categorys = []models.Category{
		{
			Cid:  1,
			Name: "go",
		},
	}
	var posts = []models.PostMore{
		{
			Pid:          1,
			Title:        "go博客",
			Content:      "内容",
			UserName:     "码神",
			ViewCount:    123,
			CreateAt:     "2022-02-20",
			CategoryId:   1,
			CategoryName: "go",
			Type:         0,
		},
	}
	var hr = &models.HomeResponse{
		Viewer:    config.Cfg.Viewer,
		Categorys: categorys,
		Posts:     posts,
		Total:     1,
		Page:      1,
		Pages:     []int{1},
		PageEnd:   true,
	}
	t.Execute(w, hr)
	t.Execute(w, hr) //这里也是error

}

func main() {
	//程序入口  一个项目只有一个入口
	//web程序 http 协议   ip  port
	server := http.Server{
		Addr: "127.0.0.1:8080",
	}

	http.HandleFunc("/", index)

	if err := server.ListenAndServe(); err != nil {
		log.Println(err)
	}
}
